package com.invernadero.invernaderotesis.Acceso_a_datos.DAOS;


import android.content.ContentValues;
import android.content.Context;

import com.invernadero.invernaderotesis.Acceso_a_datos.iDAOS.iDAO;
import com.invernadero.invernaderotesis.Modelo.Elementos.Conversion;
import com.invernadero.invernaderotesis.Modelo.Entidades.*;
import com.invernadero.invernaderotesis.Modelo.Entidades.Ambiente.*;
import com.invernadero.invernaderotesis.Modelo.Fabricas.FabricaElemento;

public class DAO implements iDAO {
	
	protected Context context;

	public Context getContext() {
		return context;
	}

	public void setContext(Context context) {
		this.context = context;
	}
	
	public String ObtenerConsultaInvernaderoCliente(String sql, Entidad cliente){
		
		sql += " FROM Invernadero I INNER JOIN";
		sql += " Persona P";
		sql += " ON P.idPersona = I.fkPersona";
		sql += " WHERE (P.idPersona =" + ((Cliente)cliente).get_id();
		sql += " )";
		
		// si el objeto invernadero es distinto a null consulamos un invernadero especifico
		if (((Cliente)cliente).getInvernadero() != null)
		      sql += " AND (I.idInvernadero =" + ((Cliente)cliente).getInvernadero().get_id()+ " )";
		
		return sql;
	}
	
	public String getConsultaInvernadero(){
		
		String sql = "";
		sql += "SELECT I.idInvernadero";
		sql += ", V.nombre";
		sql += ", V.descripcion";
		
		return sql;
	}

    /**
     * Obtenemos la consulta dependiendo del tipo de variable
     *
     * @param sql
     * @param invernadero
     * @return
     */
	public String ObtenerConsultaVariable (String sql, Entidad invernadero)
	{
		int idInvernadero = ((Invernadero)invernadero).get_id();
		
		Conversion conversion = FabricaElemento.CrearConversion();
		
		sql += " FROM Invernadero I INNER JOIN";
		sql += " VariableInver VI";
		sql += " ON I.idInvernadero = VI.fkInvernadero";
		sql += " INNER JOIN ";
		sql += " Variable V ON V.idVariable = VI.fkVariable";
		sql += " WHERE (I.idInvernadero =" + idInvernadero;
		sql += " ) AND ((strftime('%M','"+conversion.FechaActual()+"') - strftime('%M',V.fecha) ) <= 3)";
	
			   
	   return sql;
	   
	} // ObtenerConsultaIdVariable
	
	public String ObtenerConsultaCliente (String sql, Cliente cliente)
	{		
		sql += " FROM Invernadero i LEFT join Persona P";
        sql += " ON i.fkPersona = P.idPersona";
		sql += " WHERE P.usuario ='" + cliente.get_usuario().toString()+"'";
			   
	   return sql;
	   
	} // ObtenerConsultaCliente
	
	public String ObtenerConsultaIdVariable (String sql, int idInvernadero)
	{
		sql += " FROM [Variable]";
		return sql;
	} // ObtenerConsultaIdVariable
	
	public String ObtenerUltimoIdInsertado(){
		
		String sql = "";
		sql += "SELECT Max([idVariable])";
		
		return sql;
		
	} // ObtenerUltimoIdInsertado
	
	/**
	 * Obtenemos la consulta de los campos de la tabla del "Variable"
	 * @return
	 */
	public String getConsultaVariable()
	{
		String sql = "";
		sql += "SELECT V.idVariable";
		sql += ", V.nombre";
		sql += ", (strftime('%Y-%m-%d %H:%M', V.fecha)) AS fecha_anterior";	
		sql += ", V.medicion";
		sql += ", (strftime('%Y-%m-%d %H:%M', 'now')) AS fecha_actual";
		
		return sql;
		
	} // getConsultaVariable
	
	/**
	 * Obtenemos la consulta de los campos de la tabla "Persona"
	 * @return
	 */
	public String getConsultaCliente(){
		
		String sql = "";
		sql += "SELECT P.idPersona";
		sql += ", P.nombre";
		sql += ", P.apellido";	
		//sql += ", (strftime('%Y-%m-%d', 'P.fechaNacimiento')) AS fechaNacimiento";
		sql += ", P.fechaNacimiento";
		sql += ", P.correo";
		sql += ", P.password";
		sql += ", P.usuario";
        sql += ", i.nombre";
        sql += ", i.idInvernadero";
        sql += ", i.descripcion";
        sql += ", P.celular";
		
		return sql;
		
	} // getConsultaCliente
	
	/**
	 * Query o FROM para consultar el "Timer" del invernadero
	 * @param idInvernadero
	 * @return
	 */
	public String ObtenerConsultaTimer (int idInvernadero)
	{
		String sql = getConsultaTimer();
		
		sql += " FROM Timer T LEFT JOIN Invernadero I";
		sql += " ON I.idInvernadero = T.fkInvernadero";
		
		if (idInvernadero > 0){
			   
			   sql += " WHERE [I.idInvernadero] = '" + idInvernadero + "'";
			   
		}
			   
	   return sql;
	   
	} // ObtenerConsultaIdVariable
	
	public String getConsultaTimer()
	{
		String sql = "";
		sql += "SELECT MAX ([fecha])";
		sql += ", [nombre]";
		
		return sql;
		
	} // getConsultaVariable
	

	/**
	 * Creamos el registro del Timer, pasando por parametro "ambiente"
	 * 
	 * @param ambiente
	 * @return
	 */
    public ContentValues CrearRegistroTimer(Ambiente ambiente, int idInvernadero){
		
		// Crea una instancia de tipo "ContentValues" que representa un registro de la BD
		// y es al que se de deben asignar los valores a insertar
		ContentValues registro = new ContentValues();
		
		registro.put("nombre", ambiente.get_nombre());
		registro.put("fecha", String.valueOf(ambiente.getFecha()));
		registro.put("fkInvernadero", idInvernadero);
		
		return registro;		
	}
}
